package org.xx.armory.config.data;

import org.xx.armory.config.NamedPropertiesSection;

import java.util.HashMap;
import java.util.Map;

import static org.xx.armory.commons.Validators.notBlank;
import static org.xx.armory.commons.Validators.notNull;

public final class DataSection {
    private final Map<String, NamedPropertiesSection> dataSources;
    private final Map<String, RedisSection> redises;

    public DataSection() {
        this.dataSources = new HashMap<>();
        this.redises = new HashMap<>();
    }

    public final void addDataSource(
            NamedPropertiesSection section
    ) {
        notNull(section, "section");

        if (section.isEnabled()) {
            this.dataSources.putIfAbsent(section.getName(), section);
        }
    }

    public final void addRedis(
            RedisSection section
    ) {
        notNull(section, "section");

        if (section.isEnabled()) {
            this.redises.putIfAbsent(section.getName(), section);
        }
    }

    /**
     * 根据名字获取指定的数据源配置项。
     *
     * @param name
     *         名字。
     * @return 符合指定名字的配置项，如果不存在则返回 {@code null}。
     */
    public NamedPropertiesSection getDataSource(
            String name
    ) {
        name = notBlank(name, "name").trim();

        return this.dataSources.get(name);
    }


    /**
     * 根据名字获取指定的Redis数据源配置项。
     *
     * @param name
     *         名字。
     * @return 符合指定名字的配置项，如果不存在则返回 {@code null}。
     */
    public RedisSection getRedis(
            String name
    ) {
        name = notBlank(name, "name").trim();

        return this.redises.get(name);
    }
}
